// Copyright [2022] <Tianyu Zhu, Shizhen Zhao, Zihang Ren>

#ifndef ALGORITHM_H_
#define ALGORITHM_H_
#include <assert.h>
#include "graph.h"


class Algorithm {
 public:
    virtual void SetupTopology(Graph* graph) = 0;
    // Return an empty path if there is no feasible path for @flow.
    virtual Path FindPath(const Flow& flow){
       std::cout << "FindPath Not Implemented!" << std::endl;
       assert(false);
    }
    virtual PathPair FindPathPair(const Flow &flow){
       std::cout << "FindPathPair Not Implemented!" << std::endl;
       assert(false);
    }
    virtual ~Algorithm() {}

 protected:
    Graph* graph_;
};

#endif  // ALGORITHM_H_
